home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / H / tools.h < prev    next >
Text File  |  1995-12-21  |  4KB  |  175 lines

  1. /* Useful includes, definitions etc. */
  2.  
  3. #include "stdwconf.h"    /* Figure out on which system we are */
  4. #include "_ARGS.h"    /* Define _ARGS() macro appropriately */
  5.  
  6.  
  7. /****************************/
  8. /* Auto-configuration tests */
  9. /****************************/
  10.  
  11. #ifdef macintosh
  12. #define HAVE_STDLIB_H
  13. #define HAVE_STRING_H
  14. #define HAVE_STRCHR
  15. #define HAVE_STRRCHR
  16. #define HAVE_MEMCMP
  17. #define HAVE_MEMCPY
  18. #define VOID_PTR
  19. #endif
  20.  
  21. #ifdef SYSV
  22. #define VOID_PTR
  23. #endif
  24.  
  25. #ifdef AMOEBA
  26. /* Amoeba has its own way of telling which one we want: */
  27. #ifndef VOIDSTAR
  28. #define VOID_PTR
  29. #endif
  30. #endif
  31.  
  32. #ifdef __STDC__
  33. #ifndef VOID_PTR
  34. #define VOID_PTR
  35. #endif
  36. #ifndef HAVE_STDLIB_H
  37. #define HAVE_STDLIB_H
  38. #endif
  39. #endif
  40.  
  41.  
  42. /*********************/
  43. /* Universal pointer */
  44. /*********************/
  45.  
  46. #ifdef VOID_PTR
  47. #define UNIVPTR void *
  48. #else
  49. #define UNIVPTR char *
  50. #endif
  51.  
  52.  
  53. /*************/
  54. /* C library */
  55. /*************/
  56.  
  57. #include <stdio.h>
  58. #include <ctype.h>
  59. #include <errno.h>
  60.  
  61. /* Systems that don't have <string.h> should at least have <strings.h> */
  62. #ifdef HAVE_STRING_H
  63. #include <string.h>
  64. #else
  65. #include <strings.h>
  66. #endif
  67.  
  68. /* Systems that don't have str(r)chr should at least have (r)index */
  69. #ifndef HAVE_STRCHR
  70. #define strchr index
  71. #endif
  72. #ifndef HAVE_STRRCHR
  73. #define strrchr rindex
  74. #endif
  75.  
  76. /* Systems that don't have memcpy/memcmp should at least have bcopy/bcmp */
  77. #ifndef HAVE_MEMCPY
  78. #define memcpy(dest, src, n)    bcopy(src, dest, n)
  79. #endif
  80. #ifndef HAVE_MEMCMP
  81. #define memcmp(a, b, cnt)    bcmp(a, b, cnt)
  82. #endif
  83.  
  84.  
  85. #ifdef HAVE_STDLIB_H
  86.  
  87. #include <stdlib.h>
  88.  
  89. #else
  90.  
  91. #include <sys/types.h> /* For size_t -- hope it doesn't break other things */
  92.  
  93. UNIVPTR malloc _ARGS((size_t));
  94. UNIVPTR calloc _ARGS((size_t, size_t));
  95. UNIVPTR realloc _ARGS((UNIVPTR, size_t));
  96.  
  97. #ifndef NO_VOID_FREE
  98. void free _ARGS((UNIVPTR));
  99. #endif
  100.  
  101. #ifndef NO_VOID_EXIT
  102. void exit _ARGS((int));
  103. #endif
  104.  
  105. char *getenv _ARGS((char *));
  106.  
  107. #endif /* !HAVE_STDLIB_H */
  108.  
  109. /* According to the C Standard, errno may be a macro on systems with
  110.    multiple threads.  But on older systems, it may not be declared at
  111.    all in <errno.h>.  So we declare it here, except if it is a macro. */
  112.  
  113. #ifndef errno
  114. extern int errno;
  115. #endif
  116.  
  117.  
  118. /*************************************/
  119. /* Miscellaneous useful declarations */
  120. /*************************************/
  121.  
  122. /* Interface to getopt(): */
  123. extern int optind;
  124. extern char *optarg;
  125. int getopt (); /* _ARGS((int, char **, char *)); */
  126.  
  127. /* Boolean data type: */
  128. #define bool int    /* For single variable, argument or return value */
  129. #define tbool char    /* Tiny bool, used in structs or arrays */
  130. #ifndef FALSE
  131. #define FALSE 0
  132. #endif
  133. #ifndef TRUE
  134. #define TRUE 1
  135. #endif
  136.  
  137. /* Character shorthands: */
  138. #define EOS '\0'
  139. #define EOL '\n'
  140.  
  141. /* Copy string to malloc'ed memory: */
  142. char *strdup _ARGS((const char *));
  143.  
  144. /* Other useful macros: */
  145.  
  146. #define CNTRL(x) ((x) & 0x1f) /* Usage: CNTRL('X') */
  147.  
  148. #define ABS(x) ((x) < 0 ? -(x) : (x))
  149.  
  150. #ifndef MIN
  151. #define MIN(a, b) ((a) < (b) ? (a) : (b))
  152. #endif
  153. #ifndef MAX
  154. #define MAX(a, b) ((a) > (b) ? (a) : (b))
  155. #endif
  156.  
  157. #define CLIPMIN(var, min) if ((var) >= (min)) ; else (var)= (min)
  158. #define CLIPMAX(var, max) if ((var) <= (max)) ; else (var)= (max)
  159.  
  160. /* Memory allocation macros: */
  161.  
  162. #define ALLOC(type) ((type*) malloc(sizeof(type)))
  163. #define FREE(p) if ((p) != 0) { free((UNIVPTR)p); p = 0; } else /*empty*/
  164.  
  165. /* Array (re)allocation macros.
  166.    RESIZE yields nonzero if the realloc succeeded. */
  167.  
  168. #define NALLOC(type, n) ((type*) malloc((unsigned)(n) * sizeof(type)))
  169. #define RESIZE(var, type, n) \
  170.     (var= (type *) realloc((UNIVPTR)var, (n) * sizeof(type)))
  171.  
  172. /* Dynamic array macros: */
  173.  
  174. #include "lists.h"
  175.